渲染最佳实践
通过优化渲染性能,您可以显著提高应用程序的性能。
Kanzi 按如下方式渲染节点:
- 渲染并变换位于屏幕之外的节点。
- 混合强度 (Blend Intensity) 属性设为 0 的 3D 节点会被渲染。
- 可见性 (Visible) 属性被禁用的 3D 节点不会被渲染,但会被变换。
- 不透明度 (Opacity) 属性被设置为 0 的 2D 节点不会被渲染,其子节点也不会被渲染,但会对被变换。
- 可见性 (Visible) 属性被禁用的 2D 节点不会被渲染,其子节点也不会被渲染,但会对被变换。
优化应用程序的渲染性能
要优化您应用程序的渲染性能:
- 包含很多片段计算的着色器可能是渲染过程中最重要的部分。请参阅优化片段着色器。
- 当由于场景发生变化而重新计算布局时,可能会导致 CPU 的性能下降。请参阅优化布局渲染。
- 当在节点上启用了影响布局 (Affect Layout) 属性类型并且更改了这类属性的值时,Kanzi 会重新计算该节点的布局。确保只在必要时重新计算布局。例如,在每一帧重新计算布局会导致应用程序的性能下降。影响布局 (Affect Layout) 仅在 Kanzi 随附的属性会影响布局时,才会在这些属性中启用。对于自定义属性类型,您可以设置它们是否能够影响布局。请参阅创建属性类型。
- 将渲染负载分配给多个帧,以减少渲染一个完整帧所需的工作量和时间。请参阅在多个帧上分布渲染。
- 过度绘制会增加填充率,因而降低 GPU 性能。请参阅使用排序过滤器 (Sorting Filter)防止过度绘制。
- 当渲染不透明的内容时,请始终按照从前到后的顺序进行渲染。只有当您具有充分的理由时,才应按照从后到前的顺序进行渲染。
- 由于透明节点的可视化依赖于具备支持它们的适当数据,为了正确求解混合方程,正确渲染透明节点,必须从后向前渲染。请参阅渲染部分透明节点。
- 如果节点呈现的顺序需要在着色器程序之间过多切换,则渲染速度会减慢。请参阅减少着色器切换。
- 对于每个渲染目标,设置第一个视口 (Viewport) 节点的渲染通道以清除所有缓冲区。
- 确保将所有渲染目标最多只清除一次。
- 请勿将任何渲染目标的颜色、深度或模具清除一次以上。
- 移除重叠的背景笔刷。例如,如果RootPage 节点设置了背景笔刷,但也为其子节点设置了背景笔刷,请从RootPage 节点移除背景笔刷。
- 在动画化的项移动时以较低的质量渲染这些项。这样可以提高性能,但会降低质量。
- 要动态更改文本块 (Text Block) 节点中的文本大小,请使用渲染变换 (Render Transformation) 或布局变换 (Layout Transformation) 属性的缩放 (Scale) 属性字段,而非字号 (Font Size) 属性。例如,您可以使用这种方法在文本块 (Text Block) 节点中将文本大小动画化。
您使用字号 (Font Size) 属性动态缩放文本时,Kanzi 会针对不同的字体大小创建多种纹理,并且不会从内存中释放它们。
- 避免不必要的填充。例如,避免:
- 使用 3D 平面填充屏幕。例如,如果您在使用 3D 平面绘制只有一个纹理且各个角的阿尔法为 0 的圆形对象,则在大多数情况下,切除形状周围的网格可以提高填充率,因此渲染速度将会更快。
- 在阿尔法设置为 0 的情况下渲染 3D。这样会执行填充,但不会产生任何视觉效果。
- 请勿实时渲染效果,而应将效果烘培到纹理中。例如,创建纹理以模拟阴影和景深。这样可以提高性能,但也会占用更多内存。
查看渲染到纹理中的节点
帧缓冲对象之间的切换可能导致某些平台上性能显著下降。Kanzi 将节点渲染到纹理时的条件可能很复杂。例如,旋转、缩放或不透明度均可能导致渲染到纹理出现。
要查看节点是否渲染到纹理中并导致帧缓冲对象切换,请在预览 (Preview) 中点击 进入分析 (Analyze) 模式,右键点击,然后选择帧缓冲区对象 (Framebuffer objects)。
预览 (Preview) 用透明的橙色条纹突出显示渲染到纹理的层。
另请参阅
优化片段着色器
优化布局渲染
配置节点以进行有效渲染
在多个帧上分布渲染
使用排序过滤器 (Sorting Filter)防止过度绘制
渲染静态内容
渲染部分透明节点
减少着色器切换
排除应用程序的性能问题
最佳实践
打开导航